//
// Created by ASUS on 2024/12/12/星期四.
//
#include <bits/stdc++.h>
using namespace std;

#define int long long

void solve(){
	int n,target;cin>>n>>target;
	vector<vector<int>> g(n+1);
	vector<int> w(n+1),v(n+1);
	int root;
	for(int i=1;i<=n;i++){
		int s;cin>>w[i]>>v[i]>>s;
		g[s].push_back(i);
	}

	vector<vector<int>> f(n+1,vector<int>(target+1));

	auto dfs=[&](auto&&dfs,int x)->void{
		for(int j=target;j>=w[x];j--){
			f[x][j]=v[x];
		}
		for(int y:g[x]){
			dfs(dfs,y);
			for(int j=target;j>=w[x];j--){
				for(int k=0;k<=j-w[x];k++){
					f[x][j]=max(f[x][j],f[x][j-k]+f[y][k]);
				}
			}
		}
	};
	dfs(dfs,0);
	cout<<f[0][target];
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int t=1;
	//cin>>t;
	while(t--){
		solve();
		if(t)cout<<"\n";
	}
	return 0;
}
